package com.allen.controller;

import org.apache.commons.io.FilenameUtils;
import org.springframework.stereotype.Controller;
import org.springframework.util.ResourceUtils;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

/**
 * @Author: allen
 * @Data: 2021.06.22.16:04
 **/
@RestController
@RequestMapping("/file")
@CrossOrigin(origins ="*")          //允许跨域请求
public class UploadController {

    @PostMapping("upload")
    public String upload(@RequestParam("file") MultipartFile ml)throws IOException {

        /**
         * 获取项目绝对路径
         * 最终文件上传是需要绝对路径的
         * 相当于给要上传的位置定个坐标
         * classpath:就可以去获得resources的目录
         * 具体classpath:获得resources的原因就得自己去探索了，本文主要是讲文件上传
         * 这里不去除first的话这个路径开头会有一个/，虽然没有什么影响
         */
        String filePath= ResourceUtils.getURL("classpath").getPath().replaceFirst("/","")+"/static/files";
        /**
         * 创建文件目录
         * 根据自己的需求
         * 在这我就以当前时间创建
         */
//        D:\Springboot\test-app01\src\main\resources\static
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd-HH-mm");        //获取当前时间
        //文件的目录应该为绝对路径+目录名
        String dirPath = filePath+"/"+sdf.format(new Date());
        //通过这个路径创建目录
        File dir = new File(dirPath);
        //如果不存在就创建该目录
        if(!dir.exists()){
            dir.mkdirs();
        }
        /**
         * 创建文件
         * 文件名字就根据自己的需求而定
         * 我这里为了方便，就叫cutezha吧
         */
        //先获取文件本身的名字
        String oldName = ml.getOriginalFilename();
        //使用FileNameUtils获取扩展名，这里获取的没有.所以手动加上
        String extension = "."+ FilenameUtils.getExtension(oldName);
        String fileName = "cutezha"+extension;
        //上传文件
        ml.transferTo(new File(dir,fileName));

        /**
         * 将数据返回给前端，我这里就直接将路径返回了
         * 注意这里用dirPath才是斜杠，如果使用dir则是反斜杠
         */

        return dirPath+"/"+fileName;
    }
}
